package model;

/**
 *
 * @author Alvin & Roy
 */
public enum Richting {
    /**
     * Richting: Noord
     */
    N,
    /**
     * Richting: Oost
     */
    O,
    /**
     * Richting: Zuid
     */
    Z,
    /**
     * Richting: West
     */
    W,
    /**
     * Vijand verliest!
     */
    LOSS;

    public static Richting determineRichting(int hx, int hy, int nx, int ny){
        //Als de nieuwe y kleiner is dan de oude y
            if(ny < hy){
                //als het huidige vak en het nieuwe vak aan de rand zijn
                //en wanneer er geen randen zijn
                if(ny == 0 && hy == Opties.getYSize()-1&& !Opties.getRanden()){
                    //Dan is de richting zuid wanneer de wereld rond is
                    return Richting.Z;
                }else{
                    //Dan is de richting noord
                    return Richting.N;
                }
            //Als de nieuwe y groter is dan de oude y
            }else if(ny > hy){
                //als het huidige vak en het nieuwe vak aan de rand zijn
                //en wanneer er geen randen zijn
                if(ny == Opties.getYSize()-1 && hy == 0 && !Opties.getRanden()){
                    //Dan is de richting noord
                    return Richting.N;
                }else{
                    //Dan is de richting zuid
                    return Richting.Z;
                }
            //Als de nieuwe x kleiner is dan de oude x
            }else if(nx < hx){
                //als het huidige vak en het nieuwe vak aan de rand zijn
                //en wanneer er geen randen zijn
                if(nx == 0 && hx == Opties.getXSize()-1 && !Opties.getRanden()){
                    return Richting.O;
                }else{
                   //Dan is de richting west
                    return Richting.W;
                }
            }else if(nx > hx){
                //als het huidige vak en het nieuwe vak aan de rand zijn
                //en wanneer er geen randen zijn
                if(nx == Opties.getXSize()-1 && hx == 0 && !Opties.getRanden()){
                    return Richting.W;
                }else{
                    //Dan is de richting oost
                    return Richting.O;
                }
            }else{
                //return null
                return null;
            }
        }

   /**
    * Haal de tegengestelde richting van een richting op 
    * @param r De richting
    * @return De tegengestelde richting
    */
    public static Richting getTegengesteld(Richting r){
        if(r == Richting.N){
            return Richting.Z;
        }else if(r == Richting.Z){
            return Richting.N;
        }else if(r == Richting.O){
            return Richting.W;
        }else if(r == Richting.W){
            return Richting.O;
        }else{
            return null;
        }
    }
    
}
